/**
 * 项目切换器组件
 * 用于跨项目集成时在不同项目间切换
 */
const mobx = require('../../../framework/mobx/mobx_wx.js');
const { projectStore } = require('../../../store/global/project.js');

// 延迟导入project_helper，避免在组件内初始化时就必须加载
let projectHelper = null;

Component({
  /**
   * 使用MobX绑定行为
   */
  behaviors: [mobx.storeBindingsBehavior],

  /**
   * 配置MobX绑定
   */
  storeBindings: {
    store: projectStore,
    fields: {
      projectList: 'projectList',
      currentProject: 'currentProject',
      isLoading: 'isLoading'
    },
    actions: {
      setCurrentProject: 'setCurrentProject',
      loadProjectList: 'loadProjectList'
    }
  },

  /**
   * 组件属性
   */
  properties: {
    // 当前项目ID
    currentProject: {
      type: String,
      value: 'oa'
    },
    
    // 可选项目列表
    projects: {
      type: Array,
      value: [
        { id: 'oa', name: 'OA办公', icon: '/images/project_oa.png' },
        { id: 'plm', name: 'PLM研发', icon: '/images/project_plm.png' }
      ]
    },
    
    // 是否显示项目图标
    showIcon: {
      type: Boolean,
      value: true
    },
    showName: {
      type: Boolean,
      value: true
    },
    size: {
      type: String,
      value: 'default' // default, small, large
    }
  },

  /**
   * 组件初始数据
   */
  data: {
    isOpen: false,
    isProjectsLoaded: false,
    currentProjectIcon: '',
    currentProjectName: '当前项目'
  },

  observers: {
    'currentProject, projects': function(currentProject, projects) {
      this._updateCurrentProjectInfo();
    }
  },

  /**
   * 组件生命周期
   */
  lifetimes: {
    attached() {
      // 只加载当前项目信息，不加载完整项目列表
      // 获取当前项目ID（使用缓存）
      if (!projectHelper) {
        projectHelper = require('../../../helpers/project_helper.js');
      }
      const currentProject = projectHelper.getCurrentProject();
      if (currentProject && currentProject !== this.data.currentProject) {
        this.setCurrentProject(currentProject);
      }
      
      // 初始化当前项目信息
      this._updateCurrentProjectInfo();
    }
  },

  /**
   * 组件方法
   */
  methods: {
    /**
     * 更新当前项目信息
     */
    _updateCurrentProjectInfo() {
      const { currentProject, projects } = this.data;
      const currentProjectInfo = (projects || []).find(p => p.id === currentProject);
      
      this.setData({
        currentProjectIcon: currentProjectInfo ? currentProjectInfo.icon : '/images/icon_project.png',
        currentProjectName: currentProjectInfo ? currentProjectInfo.name : '当前项目'
      });
    },
    
    /**
     * 切换下拉菜单
     */
    toggleDropdown() {
      const willOpen = !this.data.isOpen;
      
      // 如果是将要打开菜单且项目列表尚未加载，则加载项目列表
      if (willOpen && (!this.data.projectList || this.data.projectList.length === 0)) {
        // 加载项目列表
        this.loadProjectList();
        this.setData({
          isProjectsLoaded: true
        });
      }
      
      this.setData({
        isOpen: willOpen
      });
    },
    
    /**
     * 关闭下拉菜单
     */
    closeDropdown() {
      this.setData({
        isOpen: false
      });
    },
    
    /**
     * 切换项目
     */
    switchProject(e) {
      // 获取项目ID
      const projectId = e.currentTarget.dataset.id;
      
      // 关闭下拉菜单
      this.closeDropdown();
      
      // 如果是当前项目，不做任何操作
      if (projectId === this.data.currentProject) return;
      
      // 通过MobX设置当前项目
      this.setCurrentProject(projectId);
      
      // 触发项目切换事件
      this.triggerEvent('switch', { projectId });
      
      // 使用新的路由系统跳转到对应项目首页
      projectHelper.setCurrentProject(projectId);
      wx.reLaunch({
        url: `/projects/${projectId}/pages/default/index/default_index`,
        fail: (err) => {
          console.error('项目切换失败:', err);
          wx.showToast({
            title: '项目切换失败',
            icon: 'none'
          });
        }
      });
    },

    // 打开/关闭选择器
    toggleSelector() {
      this.setData({
        isOpen: !this.data.isOpen
      });
    },
    
    // 选择项目
    selectProject(e) {
      const projectId = e.currentTarget.dataset.id;
      if (projectId === this.properties.currentProject) {
        // 已经是当前项目，只关闭选择器
        this.setData({ isOpen: false });
        return;
      }
      
      // 触发切换事件
      this.triggerEvent('change', { projectId });
      this.setData({ isOpen: false });
    }
  }
});

